package com.yt.claim.server.api.client;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yt.claim.models.dto.ClaimCreateDTO;
import com.yt.claim.models.dto.ClaimQueryDTO;
import com.yt.claim.models.service.ClaimService;
import com.yt.claim.models.vo.ClaimVO;
import com.yt.claim.models.vo.ClaimPageVO;
import com.yt.common.constant.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/claim")
public class ClaimController {

    @Autowired
    private ClaimService claimService;

    /**
     * 创建索赔申请
     *
     * @param dto 创建索赔申请参数
     * @return 索赔申请ID
     */
    @PostMapping
    public Result<Integer> createClaim(@RequestBody ClaimCreateDTO dto) {
        Integer claimId = claimService.createClaim(dto);
        return Result.success(claimId);
    }

    /**
     * 查询个人索赔详情
     *
     * @param id 索赔ID
     * @return 索赔详情
     */
    @GetMapping("/{id}")
    public Result<ClaimVO> getClaimById(@PathVariable Integer id) {
        ClaimVO claimVO = claimService.queryClaimById(id);
        return Result.success(claimVO);
    }

    /**
     * 分页查询个人索赔列表
     *
     * @param dto 查询条件
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    @GetMapping("/page")
    public Result<ClaimPageVO> pageQueryClaims(ClaimQueryDTO dto, 
                                               @RequestParam(defaultValue = "1") Integer pageNum,
                                               @RequestParam(defaultValue = "10") Integer pageSize) {
        // 创建分页对象
        Page<ClaimVO> page = new Page<>(pageNum, pageSize);
        // 调用服务进行分页查询
        IPage<ClaimVO> resultPage = claimService.pageQueryClaims(dto, page);
        
        // 构造返回结果
        ClaimPageVO claimPageVO = new ClaimPageVO();
        claimPageVO.setTotal(resultPage.getTotal());
        claimPageVO.setList(resultPage.getRecords());
        
        return Result.success(claimPageVO);
    }
}